package com.joeyzh.table;

import android.text.TextUtils;

import com.google.gson.Gson;
import com.joey.base.util.DataFormatUtils;
import com.prolificinteractive.materialcalendarview.MaterialCalendarView;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Joey on 2018/12/26.
 *
 * @author by Joey
 *         灵活配置的文本内容
 *         匹配后台的数据，作为枚举值的ordinal来使用
 *         <p>
 *         type："1"   文本类型  config中Text只为提示填写信息（有无均可）
 *         type："2"	数字类型  config中Formatter为小数保留位数 0为正数，2位保留两位小数，4为保留4位小数
 *         type："4"	是否Radio
 *         type: "5"	单选下拉框 config 中SingleSelectType字段为Query则为实体查询下拉,appName,entityName,OptionConfig为加载下拉框的信息odata查询获得，OptionLabel为展示的文本值，OptionValue为选中时的Value值
 *         中SingleSelectType字段为Custom则为自定义下拉,OptionLabel为展示的文本值，OptionValue为选中时的Value值，按照;号拆分字符串获得，多个option项以及值
 *         type: "6"	为多文件上传
 *         type："7"	为日期选择框 config中DateFormatter  为日期格式的提交格式分为 yyyy-MM-dd 和 yyyy-MM-dd HH:mm:ss 两种
 *         type："8"	为提示信息	 conifg中DescriptionMessage为默认页面显示提示信息，仅做提示使用
 */


public enum ComponentType {

    /**
     * 0、自定义
     */
    Custom("Custom"),
    /**
     * 1、输入样式多行
     */
    InputMore("InputMore"),
    /**
     * 2、数字样式
     */
    Number("Number"),
    /**
     * 3、输入样式单行
     */
    InputSingle("InputSingle"),
    /**
     * 4、选中
     */
    Checked("Checked"),
    /**
     * 5、下拉单选
     */
    Selected("Selected"),
    /**
     * 6、图片
     */
    Image("Image"),
    /**
     * 7、时间样式
     */
    Time("Time"),
    /**
     * 8、文本提示多行
     */
    Description("Description"),
    /**
     * 9、文本提示单行
     */
    Text("Text"),

    /**
     * 多选
     */
    SelectedMulti("SelectedMulti"),
    /**
     * 日期样式
     */
    Date("Date"),
    /**
     * 扫描文本
     */
    ScanEdit("ScanEdit"),
    /**
     *
     */
    MidView("View"),
    /**
     * MinView
     */
    MinView("View"),
    /**
     * 按钮
     */
    Button("Button");


    private String type;

    ComponentType(String type) {
        this.type = type;
    }


    @Override
    public String toString() {
        return type;
    }

    public static ComponentType parseConfig(String config) {
        if (TextUtils.isEmpty(config)) {
            return ComponentType.Custom;
        }
        ComponentType[] types = ComponentType.Custom.getDeclaringClass().getEnumConstants();
        try {
            HashMap<String, String> map = new Gson().fromJson(config, HashMap.class);
            if (map.isEmpty()) {
                return ComponentType.Custom;
            }
            int ordinal = Integer.parseInt(map.get("Type"));
            if (ordinal == Time.ordinal()) {
                /**
                 * 时间格式的判断这里有点区别
                 */
                if (map.containsKey("DateFormatter")) {
                    String format = map.get("DateFormatter");
                    if (DataFormatUtils.FORMATTER_DATE.equals(format)) {
                        return Date;
                    }
                }
            }
            return types[ordinal];
        } catch (Exception e) {
            return ComponentType.Custom;
        }

    }
}
